#ifndef __WIZ_BASE_MPP_HPP__SHANHAOBO_19800429__
#define __WIZ_BASE_MPP_HPP__SHANHAOBO_19800429__

#include "./WizBaseMacroAssert.hpp"

#include "./WizBaseMacroUtils.hpp"
#include "./WizBaseMPPCombine.hpp"
#include "./WizBaseMPPStringize.hpp"

#include "./Preprocessor/WizBaseMPPLoop.hpp"
#include "./Preprocessor/WizBaseMPPIf.hpp"
#include "./Preprocessor/WizBaseMPPBool.hpp"
#include "./Preprocessor/WizBaseMPPTupleEat.hpp"
#include "./Preprocessor/WizBaseMPPTupleElem.hpp"

#define WIZ_COMMA   ,
#define WIZ_SPACE

#define WIZ_COMMA_IF(C)                 WIZ_MPP_IF(C, WIZ_COMMA, WIZ_SPACE)

/// X0, X1, X2
#define WIZ_ENUM_PARAM_M_X(S, C, P)     WIZ_COMMA_IF(C) WIZ_MPP_COMBINE(P, C)
#define WIZ_ENUM_PARAM_X(S, X)          WIZ_MPP_LOOP(S, WIZ_ENUM_PARAM_M_X, X)

/// T0 X0, T1 X1
#define WIZ_ENUM_PARAM_M_XY(S, C, P)    WIZ_COMMA_IF(C) WIZ_MPP_COMBINE(WIZ_MPP_TUPLE_ELEM(2, 0, P), C) WIZ_MPP_COMBINE(WIZ_MPP_TUPLE_ELEM(2, 1, P), C)
#define WIZ_ENUM_PARAM_XY(S, X, Y)      WIZ_MPP_LOOP(S, WIZ_ENUM_PARAM_M_XY, (X, Y))

#endif /*__WIZ_BASE_MPP_HPP__SHANHAOBO_19800429__*/
